package com.situ.stmall.admin.controller;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.situ.stmall.admin.entity.APIResult;
import com.situ.stmall.admin.entity.Root;
import com.situ.stmall.admin.service.RootService;
import com.situ.stmall.admin.util.TokenUtil;
import com.situ.stmall.admin.util.TokenUtil.Token;

/**
 * 管理Controller
 * @author bobzyh
 *
* 在gitee进行的修改
* 
* 1. 修改一次
* 2. 修改二次
* 3. 修改三次
*/

@RestController
@RequestMapping("/api/roots")
@CrossOrigin(origins={"*"})
public class RootController {

	@Autowired
	private RootService rootService;
	/**
	 * 登录 - 查询
	 */
	@GetMapping
	public APIResult login(Root root, String vercode, String token) {
		// 1. 获取参数
		APIResult apiResult = new APIResult();

		// 判断vercode是否正确
		Token tkn = TokenUtil.parseToken(token);
		if (tkn.getStatus() == 1) {
			apiResult.setStatus(404);
			apiResult.setMsg("验证码已过期");
			return apiResult;
		}
		
		if ( ! vercode.toUpperCase().equals(tkn.getCode())) {
			apiResult.setStatus(404);
			apiResult.setMsg("验证码错误");
			
			return apiResult;
		}
		
		// 2. 调用Service层
		try {
			Root loginRoot = rootService.login(root);
			// 清除密码数据
			loginRoot.setPassword(null);
			
			// 登录成功
			// 保存到Token中
			String loginToken = TokenUtil.createToken(loginRoot.getRootname());
			
			// 返回数据
			apiResult.setStatus(200);
			apiResult.setData(loginRoot);
			apiResult.setMsg(loginToken);
			
		} catch (Exception e) {
			e.printStackTrace();
			// 登录失败
			// 返回数据
			apiResult.setStatus(404);
			apiResult.setMsg(e.getMessage());
		}
		
		// 3. 返回数据
		return apiResult;
	}
	
	@GetMapping("/{token}")
	public APIResult get(@PathVariable("token") String strToken) {
		// 解析Token字符串
		Token token = TokenUtil.parseToken(strToken);
		
		// 根据用户名, 查询当前登录的用户
		Root root = rootService.getByRootName(token.getCode());
		root.setPassword(null);
		return APIResult.ok(root);
	}
	
	/**
	 * 退出
	 */
	@DeleteMapping
	public APIResult logout(HttpSession session) {
		
		session.invalidate();
		
		APIResult apiResult = new APIResult();
		apiResult.setStatus(204);
		
		return apiResult;
	}
	
	/**
	 * 修改
	 */
}
